// package com.qiwenshare.file.util;
//
// import cn.afterturn.easypoi.word.WordExportUtil;
// import com.documents4j.api.DocumentType;
// import com.documents4j.api.IConverter;
// import com.documents4j.job.LocalConverter;
// import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter;
// import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions;
// import java.nio.file.Files;
// import java.nio.file.Paths;
// import org.apache.poi.xwpf.usermodel.XWPFDocument;
// import org.docx4j.Docx4J;
// import org.docx4j.convert.out.FOSettings;
// import org.docx4j.fonts.IdentityPlusMapper;
// import org.docx4j.fonts.Mapper;
// import org.docx4j.fonts.PhysicalFonts;
// import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.core.io.ResourceLoader;
// import org.springframework.stereotype.Component;
// import org.springframework.util.Assert;
// import javax.servlet.http.HttpServletRequest;
// import javax.servlet.http.HttpServletResponse;
// import java.io.*;
// import java.net.URLEncoder;
// import java.nio.charset.StandardCharsets;
// import java.text.SimpleDateFormat;
// import java.util.Date;
// import java.util.Map;
//
// /**
//  * @ClassName WordUtil
//  * @Description 描述:easypoi导出工具类
//  * @Author xuan
//  * @Date 2023/8/22
//  * @Version 2.0
//  **/
// @Component
// public class ConvertOfficeToPdf {
//     // @Value(value = "${jeecg.path.upload}")
//     private String uploadpath;  //从yml文件读取文件下载路径
//
//     @Autowired
//     private  ResourceLoader resourceLoader;
//
//     // public String exportPdf() throws IOException {
//     //     String absolutePath = resourceLoader.getResource("classpath:" + temPath).getFile().getAbsolutePath();
//     //     //String absolutePath = ResourceUtils.getFile("classpath:static\\template\\1.docx").getAbsolutePath();
//     //     return exportPdf(absolutePath,params);
//     // }
//
//     public static void main(String[] args) throws IOException {
//         // convertDocx2Pdf("C:\\Users\\TRX\\Desktop\\watermark\\跨网文件安全交换系统概要设计 - 副本.docx","C:\\Users\\TRX\\Desktop\\watermark\\aaa.pdf");
//         // 限制windows
//         // documents4jWord2pdf("C:\\Users\\TRX\\Desktop\\watermark\\跨网文件安全交换系统概要设计 - 副本.docx","C:\\Users\\TRX\\Desktop\\watermark\\asdasdf.pdf");
//         poiWord2Pdf("C:\\Users\\TRX\\Desktop\\watermark\\跨网文件安全交换系统概要设计 - 副本.docx","C:\\Users\\TRX\\Desktop\\watermark\\asdasdf.pdf");
//     }
//
//     /**
//      * 导出PDF
//      *
//      * @param templatePath word模板地址
//      * @param params       替换的参数
//      * @return pdf的完全路径
//      */
//     public  String exportPdf(String templatePath, Map<String, Object> params) {
//         // 生成的wold文档文件名
//         String woldFileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".docx";
//         //保存的文件路径名
//         String saveDir = uploadpath + File.separator + "pdf";
//         // 生成的pdf文件名
//         String pdfFileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".pdf";
//         // 导出wold文档 返回值为生成的wold文档全路径
//         String word = exportWord(templatePath, saveDir, woldFileName, params);
//         cn.hutool.core.lang.Assert.notNull(word, "word路径不能为空");
//
//         // 自定义生成的pdf全路径
//         String pdfPath = saveDir + File.separator + pdfFileName;
//         // 导出pdf,同时删除生成的wold文档
//         convertDocx2Pdf(word, pdfPath);
//         return pdfPath;
//     }
//
//
//     /**
//      * 导出word
//      * 模版变量中变量格式：{{foo}}
//      *
//      * @param templatePath word模板地址
//      * @param saveDir      word文档保存的路径
//      * @param fileName     文件名
//      * @param params       替换的参数
//      */
//     public String exportWord(String templatePath, String saveDir, String fileName, Map<String, Object> params) {
//         Assert.notNull(templatePath, "模板路径不能为空");
//         Assert.notNull(saveDir, "临时文件路径不能为空");
//         Assert.notNull(fileName, "导出文件名不能为空");
//         Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式");
//         if (!saveDir.endsWith("/")) {
//             saveDir = saveDir + File.separator;
//         }
//
//         File dir = new File(saveDir);
//         if (!dir.exists()) {
//             dir.mkdirs();
//         }
//         String savePath = saveDir + fileName;
//
//         try {
//             XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
//             FileOutputStream fos = new FileOutputStream(savePath);
//             doc.write(fos);
//             fos.flush();
//             fos.close();
//         } catch (Exception e) {
//             e.printStackTrace();
//         }
//         return savePath;
//     }
//
//     public String exportWord(String templatePath, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
//         Assert.notNull(templatePath,"模板路径不能为空");
//         Assert.notNull(temDir,"临时文件路径不能为空");
//         Assert.notNull(fileName,"导出文件名不能为空");
//         Assert.isTrue(fileName.endsWith(".docx"),"word导出请使用docx格式");
//         if (!temDir.endsWith("/")){
//             temDir = temDir + File.separator;
//         }
//         File dir = new File(temDir);
//         if (!dir.exists()) {
//             dir.mkdirs();
//         }
//         try {
//             String userAgent = request.getHeader("user-agent").toLowerCase();
//             if (userAgent.contains("msie") || userAgent.contains("like gecko")) {
//                 fileName = URLEncoder.encode(fileName, "UTF-8");
//             } else {
//                 fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
//             }
//             XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
//             String tmpPath = temDir + fileName;
//             FileOutputStream fos = new FileOutputStream(tmpPath);
//             doc.write(fos);
//             // 设置强制下载不打开
//             response.setContentType("application/force-download");
//             // 设置文件名
//             response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
//             OutputStream out = response.getOutputStream();
//             doc.write(out);
//             out.close();
//         } catch (Exception e) {
//             e.printStackTrace();
//         } finally {
//             //这一步看具体需求，要不要删
//             //delFileWord(temDir,fileName);
//         }
//         return temDir + fileName;
//     }
//
//     /**
//      * 删除零时生成的文件
//      */
//     public void delFileWord(String filePath, String fileName) {
//         File file = new File(filePath + fileName);
//         File file1 = new File(filePath);
//         file.delete();
//         file1.delete();
//     }
//
//     /**
//      * @param wordPath word文件路径
//      * @param pdfPath  pdf输出路径
//      */
//     public static void convertDocx2Pdf(String wordPath, String pdfPath) {
//         OutputStream os = null;
//         InputStream is = null;
//         if (pdfPath.endsWith("/")) {
//             pdfPath = pdfPath + File.separator;
//         }
//         try {
//             is = new FileInputStream(new File(wordPath));
//             WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(is);
//             Mapper fontMapper = new IdentityPlusMapper();
//             fontMapper.put("隶书", PhysicalFonts.get("LiSu"));
//             fontMapper.put("宋体", PhysicalFonts.get("SimSun"));
//             fontMapper.put("微软雅黑", PhysicalFonts.get("Microsoft Yahei"));
//             fontMapper.put("黑体", PhysicalFonts.get("SimHei"));
//             fontMapper.put("楷体", PhysicalFonts.get("KaiTi"));
//             fontMapper.put("新宋体", PhysicalFonts.get("NSimSun"));
//             fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai"));
//             fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong"));
//             fontMapper.put("宋体扩展", PhysicalFonts.get("simsun-extB"));
//             fontMapper.put("仿宋", PhysicalFonts.get("FangSong"));
//             fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312"));
//             fontMapper.put("幼圆", PhysicalFonts.get("YouYuan"));
//             fontMapper.put("华文宋体", PhysicalFonts.get("STSong"));
//             fontMapper.put("华文中宋", PhysicalFonts.get("STZhongsong"));
//             mlPackage.setFontMapper(fontMapper);
//             os = new java.io.FileOutputStream(pdfPath);
//             //docx4j  docx转pdf
//             FOSettings foSettings = Docx4J.createFOSettings();
//             foSettings.setWmlPackage(mlPackage);
//             Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
//
//             is.close();//关闭输入流
//             os.close();//关闭输出流
//
//         } catch (Exception e) {
//             e.printStackTrace();
//             try {
//                 if (is != null) {
//                     is.close();
//                 }
//                 if (os != null) {
//                     os.close();
//                 }
//             } catch (Exception ex) {
//                 ex.printStackTrace();
//             }
//         } finally {
//             // 删除word文档的地址
//             File file = new File(wordPath);
//             if (file != null && file.isFile() && file.exists()) {
//                 file.delete();
//             }
//         }
//     }
//
//     /**
//      * @param path 图片路径
//      * @return
//      * @throws IOException
//      */
//     public byte[] getImageBase64(String path) throws IOException {
//         InputStream input = new FileInputStream(path);
//         ByteArrayOutputStream output = new ByteArrayOutputStream();
//         byte[] buf = new byte[1024];
//         int numBytesRead = 0;
//         while ((numBytesRead = input.read(buf)) != -1) {
//             output.write(buf, 0, numBytesRead);
//         }
//         byte[] data = output.toByteArray();
//         output.close();
//         input.close();
//         return data;
//     }
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//     public static void documents4jWord2pdf(String source, String target) throws IOException {
//         // 参考：https:
//         //blog.csdn.net/ka3p06/article/details/125476270 通过documents4j实现
//         InputStream docxInputStream = null;
//         OutputStream outputStream = null;
//         try {
//             // 原word地址
//             docxInputStream = new FileInputStream(source);
//             // 转换后pdf生成地址
//             outputStream = new FileOutputStream(target);
//             IConverter converter = LocalConverter.builder().build();
//             converter.convert(docxInputStream)
//                     .as(DocumentType.DOCX)
//                     .to(outputStream)
//                     .as(DocumentType.PDF).execute();
//             // 关闭
//             converter.shutDown();
//             // 关闭
//             outputStream.close();
//             // 关闭
//             docxInputStream.close();
//         } catch (Exception e) {
//             System.out.println("[documents4J] word转pdf失败:" + e.toString());
//         } finally {
//             if (outputStream != null) {
//                 outputStream.close();
//             }
//             if (docxInputStream != null) {
//                 docxInputStream.close();
//             }
//         }
//     }
//
//
//
//
//
//     public static void poiWord2Pdf(String source, String target) throws IOException {
//         XWPFDocument document;
//         InputStream doc = Files.newInputStream(Paths.get(source));
//         document = new XWPFDocument(doc);
//         PdfOptions options = PdfOptions.create();
//         OutputStream out = Files.newOutputStream(Paths.get(target));
//         PdfConverter.getInstance().convert(document, out, options);
//         doc.close();
//         out.close();
//
//     }
//
//
// }